package ThreadPool.Instance;

import java.util.ArrayList;

import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadTest {
    public static void main(String[] args) {
        // 目标：完成多线程的综合小案例
        // 红包雨游戏，某企业有100名员工，员工的工号依次是1, 2，3, 4，..到100。
        // 现在公司举办了年会活动，活动中有一个红包雨环节，要求共计发出200个红包雨
        // 其中小红包在[1 - 30]  元之间，总占比为80%，
        // 大红包[31-100]元，总占比为20%。
        // 分析：100个员工实际上就是100个线程，来竞争200个红包。

        HongBao hongBao;
        ArrayList<HongBao> list = new ArrayList<>();
        int money1 = 0;
        int money2 = 0;
        Random r = new Random();
        for (int i = 1; i <= 200; i++) {
            if (i <= 160) {
                money1 = r.nextInt(30) + 1;
                hongBao = new HongBao(money1);
                list.add(hongBao);
            } else {
                money2 = r.nextInt(70)+31;
                hongBao = new HongBao(money2);
                list.add(hongBao);
            }
        }

        ThreadPoolExecutor tpe = new ThreadPoolExecutor(3,
                5,
                10,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<Runnable>(5),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
        int index;
        for (int i = 1; i <= 100; i++) {
            index = r.nextInt(201);
            Thread t = new Thread(new MyRunnable(list.get(index)),"员工"+index);
            tpe.submit( t);
        }
    }
}
